#pragma once
#include <GxEPD2_BW.h>
#include <GxEPD2_3C.h>
#include "GxEPD2_370C_UC8253.h"
#include <U8g2_for_Adafruit_GFX.h>
#include "DataModels.h"

namespace DisplayManager
{
#define EPD2_COLOR GxEPD2_3C
#define EPD2_MODE GxEPD2_370C_UC8253

    extern EPD2_COLOR<EPD2_MODE, EPD2_MODE::HEIGHT> display;
    extern U8G2_FOR_ADAFRUIT_GFX u8g2Fonts;
    extern time_t lastRefreshTime;
    #define UPDATE_INTERVAL_HOURS 1
    #define UPDATE_INTERVAL_US (UPDATE_INTERVAL_HOURS * 60ULL * 60ULL * 1000000ULL)

    void initDisplay();

    // 全屏刷新
    void updateDisplayFull();
    // 记录刷新时间
    void recordRefreshTime();

    /**
     * @brief 关闭墨水屏电源（降低功耗）
     * @param deep true=hibernate（仅RST唤醒），false=powerOff（推荐）
     */
    void sleep(bool deep = false);

    int drawWrappedText(U8G2_FOR_ADAFRUIT_GFX &u8g2, int x, int y, String text, int maxChars, int lineHeight);
}